//package com.mashibing.interceptor;
//
//import org.apache.ibatis.executor.Executor;
//import org.apache.ibatis.mapping.MappedStatement;
//import org.apache.ibatis.mapping.SqlCommandType;
//import org.apache.ibatis.plugin.Interceptor;
//import org.apache.ibatis.plugin.Intercepts;
//import org.apache.ibatis.plugin.Invocation;
//import org.apache.ibatis.plugin.Signature;
//import org.apache.ibatis.session.ResultHandler;
//import org.apache.ibatis.session.RowBounds;
//
//import java.lang.reflect.Field;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Properties;
//
///**
// * MyBatis中的自定义的拦截器
// */
//@Intercepts(
//  {@Signature(
//    type = Executor.class,
//    method = "update",
//    args = {MappedStatement.class, Object.class})
//  })
//public class MyInterceptor implements Interceptor {
//
//  private String interceptorName;
//
//  public String getInterceptorName() {
//    return interceptorName;
//  }
//
//  public void setInterceptorName(String interceptorName) {
//    this.interceptorName = interceptorName;
//  }
//
//
//  /**
//   * 执行拦截的方法
//   *
//   * @param invocation
//   * @return
//   * @throws Throwable
//   */
//  @Override
//
//  public Object intercept(Invocation invocation) throws Throwable {
//    map.put("emp", Arrays.asList("ename"));
//    MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
//    //获取操作类型
//    SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
//    if (SqlCommandType.INSERT.equals(sqlCommandType) || SqlCommandType.UPDATE.equals(sqlCommandType)) {
//      Object obj = invocation.getArgs()[1];
//      Class<?> clazz = obj.getClass();
//      String simpleName = clazz.getSimpleName();
//      Field[] declaredFields = clazz.getDeclaredFields();
//      List<String> emp = map.get("emp");
//      for (Field field : declaredFields) {
//        if (emp.contains(field.getName())) {
//
//        }
//      }
//    }
//
//
//    System.out.println("------MyInterceptor  before---------");
//    Object proceed = invocation.proceed();
//    System.out.println("------MyInterceptor  after---------");
//    return proceed;
//  }
//
//  private static Map<String, List<String>> map = new HashMap<>();
//  private void setFieldValue(Object obj, Field field) throws IllegalAccessException {
//    field.setAccessible(true);
//    field.set(obj, new Date());
//  }
//
//  @Override
//  public Object plugin(Object target) {
//    return Interceptor.super.plugin(target);
//  }
//
//  @Override
//  public void setProperties(Properties properties) {
//    System.out.println("setProperties : " + properties.getProperty("interceptorName"));
//    this.interceptorName = properties.getProperty("interceptorName");
//  }
//}
